home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright 1992, 1993, 1994, Silicon Graphics, Inc.
- * All Rights Reserved.
- *
- * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
- * the contents of this file may not be disclosed to third parties, copied or
- * duplicated in any form, in whole or in part, without the prior written
- * permission of Silicon Graphics, Inc.
- *
- * RESTRICTED RIGHTS LEGEND:
- * Use, duplication or disclosure by the Government is subject to restrictions
- * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
- * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
- * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
- * rights reserved under the Copyright Laws of the United States.
- */
- #include <gl.h>
- #include <device.h>
- #include <math.h>
-
- long RX = 300;
- long RY = 300;
-
- #define PI 3.1415926535897
-
- float *DX, *DY;
- unsigned char *R, *R1;
-
- #define raster(i, j, c) (*(R + (i*RY + j)*3 + c))
- #define raster1(i, j, c) (*(R1 + (i*RY + j)*3 + c))
- #define dx(i, j) (*(DX + (i*RY + j)))
- #define dy(i, j) (*(DY + (i*RY + j)))
-
- long ipattern = 0, idx = 0, idy = 0;
- long ipatternmax = 8, dmax = 26;
- float param1 = 1.0, param2 = 1.0;
- long generation = 0, stopped = 0;
- short dflag = 0;
-
- void allocrasters()
- {
- R = (unsigned char *)malloc(RX*RY*3);
- R1 = (unsigned char *)malloc(RX*RY*3);
- DX = (float *)malloc(RX*RY*sizeof(float));
- DY = (float *)malloc(RX*RY*sizeof(float));
- }
-
- void displayraster()
- {
- long i, j, k, l, m;
- char title[50], *halt;
-
- if (dflag == 0) {
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- k = raster(i, j, 0);
- l = raster(i, j, 1);
- m = raster(i, j, 2);
- RGBcolor(k, l, m);
- pnt2i(i, j);
- }
- } else {
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- k = raster1(i, j, 0);
- l = raster1(i, j, 1);
- m = raster1(i, j, 2);
- RGBcolor(k, l, m);
- pnt2i(i, j);
- }
- }
- swapbuffers();
- if (stopped) halt = "[halted]";
- else halt = "";
-
- if (param1 == 1.0 && param2 == 1.0)
- sprintf(title, "ns %d %d %d (gen %d) %s", ipattern, idx, idy, generation, halt);
- else if (param2 == 1.0)
- sprintf(title, "ns %d %d %d %g (gen %d) %s",
- ipattern, idx, idy, param1, generation, halt);
- else
- sprintf(title, "ns %d %d %d %g %g (gen %d) %s",
- ipattern, idx, idy, param1, param2, generation, halt);
- wintitle(title);
- }
-
- void initraster()
- {
- long i, j, k, i1, j1, i_1, j_1;
- long th, sh;
- float r, s, v[3], x1, y1;
- unsigned long *lptr;
-
- if (ipattern != -1) allocrasters();
-
- switch (ipattern) {
- default:
- case -1:
- sizeofimage("in.rgb",&RX, &RY);
- allocrasters();
- lptr = (unsigned long *)longimagedata("in.rgb");
- for (j = 0; j < RY; j++) {
- for (i = 0; i < RX; i++) {
- int c = *lptr++;
- raster(i, j, 0) = (c>>0)&0xff;
- raster(i, j, 1) = (c>>8)&0xff;
- raster(i, j, 2) = (c>>16)&0xff;
- }
- }
- break;
- case 0:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- raster(i, j, 0) = 0;
- raster(i, j, 1) = 0;
- raster(i, j, 2) = 0;
- }
- break;
- case 1:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- raster(i, j, 0) = (i*5*255/(RX-1))&0xff;
- raster(i, j, 1) = (i*5*255/(RX-1))&0xff;
- raster(i, j, 2) = (i*5*255/(RX-1))&0xff;
- }
- break;
- case 2:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- r = 60.0*((float)i)/(RX-1);
- th = r;
- if ((th % 5) == 0) i1 = 0; else i1 = 255;
- raster(i, j, 0) = i1;
- raster(i, j, 1) = i1;
- raster(i, j, 2) = i1;
- }
- break;
- case 3:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- r = 60.0*((float)i)/(RX-1);
- th = r;
- s = 60.0*((float)j)/(RY-1);
- sh = s;
- if (((sh % 5) == 0) ||((th % 5) == 0)) i1 = 0; else i1 = 255;
- raster(i, j, 0) = i1;
- raster(i, j, 1) = i1;
- raster(i, j, 2) = i1;
- }
- break;
- case 4:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- i1 = i-RX/2; j1 = j-RY/2;
- raster(i, j, 0) = ((i1*i1+j1*j1)/50)&0xff;
- raster(i, j, 1) = ((i1*i1+j1*j1)/45)&0xff;
- raster(i, j, 2) = ((i1*i1+j1*j1)/70)&0xff;
- }
- break;
- case 5:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- th = atan2((j-(RY-1)/2.0), (i-(RX-1)/2.0))*127.5/PI;
- raster(i, j, 0) = (th)&0xff;
- raster(i, j, 1) = (th+85)&0xff;
- raster(i, j, 2) = (th+170)&0xff;
- }
- break;
- case 6:
- for (i = 0; i < RX; i++) {
- v[0] = 126+126.0*cos((i*PI*10)/(RY-1));
- v[1] = 126+126.0*cos((i*PI*8)/(RY-1));
- v[2] = 126+126.0*cos((i*PI*2)/(RY-1));
- for (j = 0; j < RY; j++) {
- raster(i, j, 0) = v[0];
- raster(i, j, 1) = v[1];
- raster(i, j, 2) = v[2];
- }
- }
- break;
- case 7:
- for (i = 0; i < RX; i++) {
- for (j = 0; j < RY; j++) {
- v[0] = 126+126.0*cos(((abs(i-RX/2)+abs(j-RY/2))*PI*10)/(RY+RX-2));
- v[1] = 126+126.0*cos(((abs(i-RX/2)+abs(j-RY/2))*PI*8)/(RY+RX-2));
- v[2] = 126+126.0*cos(((abs(i-RX/2)+abs(j-RY/2))*PI*2)/(RY+RX-2));
- raster(i, j, 0) = v[0];
- raster(i, j, 1) = v[1];
- raster(i, j, 2) = v[2];
- }
- }
- break;
- case 8:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- raster(i, j, 0) = (i*255/(RX-1))&0xff;
- raster(i, j, 1) = (j*255/(RX-1))&0xff;
- raster(i, j, 2) = 0;
- }
- break;
- }
- switch (idx) {
- default:
- case 0:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dx(i, j) = 0;
- }
- break;
- case 1:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dx(i, j) = param1*12*cos((j*PI*10*param2)/(RY-1));
- }
- break;
- case 2:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dx(i, j) = param1*12*cos((j*PI*4*param2)/(RY-1));
- }
- break;
- case 3:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dx(i, j) = param1*15*cos((j*PI*2*param2)/(RY-1));
- }
- break;
- case 4:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dx(i, j) = param1*8*cos((j*PI*4*param2)/(RY-1));
- }
- break;
- case 5:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dx(i, j) = param1*5*sin((j*PI*14*param2)/(RY-1));
- }
- break;
- case 6:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dx(i, j) = param1*15*sin((j*PI*param2)/(RY-1));
- }
- break;
- case 7:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dx(i, j) = param1*(float)j/30;
- }
- break;
- case 8:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dx(i, j) = param1*5*sin((j*PI*14)/(RY-1))*cos((i*PI*2*param2)/(RX-1));
- }
- break;
- case 9:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dx(i, j) = (((rand())>>5)&0x1f) - 16;
- }
- for (k = 0; k < 4; k++)
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- i1 = i+1; j1 = j+1;
- i_1 = i-1; j_1 = j-1;
- if (i1 == RX) i1 = 0;
- if (j1 == RY) j1 = 0;
- if (i_1 == -1) i1 = RX-1;
- if (j_1 == -1) j1 = RY-1;
- dx(i, j) = (4*(dx(i, j)) + dx(i1, j1) + dx(i_1, j1) +
- dx(i_1, j_1) + dx(i1, j_1) + 2*(dx(i, j1) +
- dx(i, j_1) + dx(i1, j) + dx(i_1, j)))/16.0;
- }
- break;
- case 10:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dx(i, j) = param1*8*cos((j*PI*10*param2)/(RY-1));
- }
- break;
- case 11:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- dx(i, j) = 12.0*(x1*x1-y1*y1) + param1;
- }
- break;
- case 12:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- r = x1*x1+y1*y1;
- dx(i, j) = -param1*8.0*y1/(1.0+r*r);
- }
- break;
- case 13:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- r = x1*x1+y1*y1;
- dx(i, j) = -param1*8.0*x1/(1.0+r*r);
- }
- break;
- case 14:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- r = x1*x1+y1*y1;
- dx(i, j) = param1*8.0*x1/(1.0+r*r);
- }
- break;
- case 15:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1)-0.5;
- y1 = -1.0 + 2.0*j/(RY-1);
- r = x1*x1+y1*y1;
- dx(i, j) = param1*7.0*(x1)/(1.0+r*r);
- x1 = -1.0 + 2.0*i/(RX-1)+0.5;
- y1 = -1.0 + 2.0*j/(RY-1);
- r = x1*x1+y1*y1;
- dx(i, j) -= param1*7.0*(x1)/(1.0+r*r);
- }
- break;
- case 16:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- r = x1*x1+y1*y1;
- dx(i, j) = -param1*8*y1/(.5+r) +x1*3;
- }
- break;
- case 17:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dx(i, j) = param1*5*sin((j*PI*14)/(RY-1))+cos((i*PI*2*param2)/(RX-1));
- }
- break;
- case 18:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- r = x1*x1+y1*y1;
- dx(i, j) = param1*8.0*x1/(1.0+r)*cos(20*r);
- }
- break;
- case 19:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- dx(i, j) = param1*8.0*(x1*x1-y1*y1);
- }
- break;
- case 20:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- x1 *= param2; y1 *= param2;
- dx(i, j) = param1*8.0*exp(x1)*cos(5*y1);
- }
- break;
- case 21:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- dx(i, j) = -param1*8.0*(cos(4*PI*(x1-y1)));
- }
- break;
- case 22:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- dx(i, j) = -param1*8.0/(1.3+cos(4*PI*(x1-y1)));
- }
- break;
- case 23:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- dx(i, j) = -param1*8.0*(cos(param2*4*PI*(y1*y1)));
- }
- break;
- case 24:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- dx(i, j) = -param1*8.0*(cos(param2*4*PI*(y1*y1-x1*x1)));
- }
- break;
- case 25:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- dx(i, j) = -param1*12.0*x1*(cos(param2*4*PI*(y1)));
- }
- break;
- case 26:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- dx(i, j) = -param1*15.0*x1*x1*(cos(param2*4*PI*(y1)));
- }
- break;
- }
- switch (idy) {
- default:
- case 0:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dy(i, j) = 0;
- }
- break;
- case 1:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dy(i, j) = param1*12*cos((i*PI*10*param2)/(RX-1));
- }
- break;
- case 2:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dy(i, j) = param1*12*cos((i*PI*4*param2)/(RX-1));
- }
- break;
- case 3:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dy(i, j) = param1*15*cos((i*PI*2*param2)/(RX-1));
- }
- break;
- case 4:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dy(i, j) = param1*8*cos((i*PI*4*param2)/(RX-1));
- }
- break;
- case 5:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dy(i, j) = param1*5*sin((i*PI*14*param2)/(RX-1));
- }
- break;
- case 6:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dy(i, j) = param1*15*sin((i*PI*param2)/(RX-1));
- }
- break;
- case 7:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dy(i, j) = param1*(float)i/30;
- }
- break;
- case 8:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dy(i, j) = param1*5*sin((i*PI*14)/(RX-1))*cos((j*PI*2*param2)/(RY-1));
- }
- break;
- case 9:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dy(i, j) = (((rand())>>5)&0x1f) - 16;
- }
- for (k = 0; k < 4; k++)
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- i1 = i+1; j1 = j+1;
- i_1 = i-1; j_1 = j-1;
- if (i1 == RX) i1 = 0;
- if (j1 == RY) j1 = 0;
- if (i_1 == -1) i1 = RX-1;
- if (j_1 == -1) j1 = RY-1;
- dy(i, j) = (4*dy(i, j) + dy(i1, j1) + dy(i_1, j1) +
- dy(i_1, j_1) + dy(i1, j_1) + 2*(dy(i, j1) +
- dy(i, j_1) + dy(i1, j) + dy(i_1, j)))/16.0;
- }
- break;
- case 10:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dy(i, j) = param1*8*cos((i*PI*10*param2)/(RX-1));
- }
- break;
- case 11:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- dy(i, j) = 12.0*x1*y1 + param2;
- }
- break;
- case 12:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- r = x1*x1+y1*y1;
- dy(i, j) = param1*8*x1/(1.0+r*r);
- }
- break;
- case 13:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- r = x1*x1+y1*y1;
- dy(i, j) = -param1*8.0*y1/(1.0+r*r);
- }
- break;
- case 14:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- r = x1*x1+y1*y1;
- dy(i, j) = param1*8.0*y1/(1.0+r*r);
- }
- break;
- case 15:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1)-0.5;
- y1 = -1.0 + 2.0*j/(RY-1);
- r = x1*x1+y1*y1;
- dy(i, j) = param1*7.0*y1/(1.0+r*r);
- x1 = -1.0 + 2.0*i/(RX-1)+0.5;
- y1 = -1.0 + 2.0*j/(RY-1);
- r = x1*x1+y1*y1;
- dy(i, j) -= param1*7.0*(y1)/(1.0+r*r);
- }
- break;
- case 16:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- r = x1*x1+y1*y1;
- dy(i, j) = param1*8*x1/(0.5+r) +y1*3;
- }
- break;
- case 17:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- dy(i, j) = param1*5*sin((i*PI*14)/(RX-1))+cos((j*PI*2*param2)/(RY-1));
- }
- break;
- case 18:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- r = x1*x1+y1*y1;
- dy(i, j) = param1*8.0*y1/(1.0+r)*cos(20*r);
- }
- break;
- case 19:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- dy(i, j) = param1*8.0*x1*y1;
- }
- break;
- case 20:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- x1 *= param2; y1 *= param2;
- dy(i, j) = param1*8.0*exp(x1)*sin(5*y1);
- }
- break;
- case 21:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- dy(i, j) = -param2*8.0*(cos(4*PI*(x1+y1)));
- }
- break;
- case 22:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- dy(i, j) = -param2*8.0/(1.3+cos(4*PI*(x1+y1)));
- }
- break;
- case 23:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- dy(i, j) = -param1*8.0*(cos(param2*4*PI*(x1*x1)));
- }
- break;
- case 24:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- dy(i, j) = -param1*8.0*(cos(param2*4*PI*(x1*x1*x1)));
- }
- break;
- case 25:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- dy(i, j) = -param1*12.0*y1*(cos(param2*4*PI*(x1)));
- }
- break;
- case 26:
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- x1 = -1.0 + 2.0*i/(RX-1);
- y1 = -1.0 + 2.0*j/(RY-1);
- dy(i, j) = -param1*15.0*y1*y1*(cos(param2*4*PI*(x1)));
- }
- break;
- }
- }
-
- void iterate(unsigned char *R, unsigned char *R1)
- {
- long i, j, k;
- float i1, j1;
- long ifl, jfl, ifl1, jfl1, ifl2, jfl2;
- float ifr, jfr;
-
- generation++;
- for (i = 0; i < RX; i++)
- for (j = 0; j < RY; j++) {
- i1 = dx(i, j); j1 = dy(i, j);
- ifl = floor(i1); jfl = floor(j1);
- ifr = i1 - ifl; jfr = j1 - jfl;
- ifl1 = ifl+i; jfl1 = jfl+j;
- ifl2 = ifl1+1; jfl2 = jfl1+1;
- while (ifl1 >= RX) ifl1 -= RX;
- while (jfl1 >= RY) jfl1 -= RY;
- while (ifl2 >= RX) ifl2 -= RX;
- while (jfl2 >= RY) jfl2 -= RY;
- while (ifl1 < 0) ifl1 += RX;
- while (jfl1 < 0) jfl1 += RY;
- while (ifl2 < 0) ifl2 += RX;
- while (jfl2 < 0) jfl2 += RY;
- for (k = 0; k < 3; k++)
- raster1(i, j, k) = raster(ifl1, jfl1, k)*(1.0-ifr)*(1.0-jfr) +
- raster(ifl2, jfl1, k)*(ifr)*(1.0-jfr) +
- raster(ifl1, jfl2, k)*(1.0-ifr)*(jfr) +
- raster(ifl2, jfl2, k)*(ifr)*(jfr);
- }
- if (ipattern == 0)
- for (i = RX/2-5; i < RX/2+5; i++)
- for (j = RY/2-5; j < RY/2+5; j++)
- raster1(i, j, 0) = raster1(i, j, 1) = raster1(i, j, 2) = 255;
- }
-
- void printdata()
- {
- long i, j;
-
- printf("unsigned char reddata[%d][%d] = {\n", RX, RY);
- for (j = 0; j < RY; j++) {
- printf("{");
- for (i = 0; i < RX; i++) {
- printf("0x%2.2x,", raster(i, j, 0));
- }
- printf("},\n");
- }
- printf("};\n");
- printf("unsigned char greendata[%d][%d] = {\n", RX, RY);
- for (j = 0; j < RY; j++) {
- printf("{");
- for (i = 0; i < RX; i++) {
- printf("0x%2.2x,", raster(i, j, 1));
- }
- printf("},\n");
- }
- printf("};\n");
- printf("unsigned char bluedata[%d][%d] = {\n", RX, RY);
- for (j = 0; j < RY; j++) {
- printf("{");
- for (i = 0; i < RX; i++) {
- printf("0x%2.2x,", raster(i, j, 2));
- }
- printf("},\n");
- }
- printf("};\n");
- }
-
- main(int argc, char **argv)
- {
- short val, i, j;
-
- if ((argc != 4) && (argc != 5) && (argc != 6)) {
- printf("usage: %s init dx dy [param1] [param2]\n", argv[0]);
- printf("-1 <= init <= %d\n", ipatternmax);
- printf("0 <= dx <= %d\n", dmax);
- printf("0 <= dy <= %d\n", dmax);
- exit(0);
- }
- ipattern = atoi(argv[1]);
- idx = atoi(argv[2]);
- idy = atoi(argv[3]);
- if (argc >= 5)
- param1 = atof(argv[4]);
- if (argc == 6)
- param2 = atof(argv[5]);
- if (ipattern > ipatternmax || ipattern < -1) ipattern = 1;
- if (idx > dmax || idx < 0) idx = 1;
- if (idy > dmax || idy < 0) idy = 1;
- initraster();
- prefsize(RX, RY);
- winopen("swirl");
- qdevice(ESCKEY);
- qdevice(QKEY); qdevice(SKEY);
- qdevice(IKEY); qdevice(PKEY);
- RGBmode();
- doublebuffer();
- gconfig();
- displayraster();
- while (1) {
- while (qtest()) switch(qread(&val)) {
- case SKEY:
- if (val == 0) break;
- stopped = 1-stopped;
- displayraster();
- break;
- case IKEY:
- if (val == 0) break;
- printf("saving image . . .\n");
- savewindow("out.rgb");
- printf("saved image as 'out.rgb'\n");
- break;
- case ESCKEY:
- case QKEY:
- exit(0);
- case PKEY:
- if (val == 0) break;
- printdata();
- break;
- case REDRAW:
- displayraster();
- break;
- default:
- break;
- }
- if (stopped == 0) {
- if (dflag == 0)
- iterate(R, R1);
- else
- iterate(R1, R);
- dflag = 1 - dflag;
- displayraster();
- } else sginap(5);
- }
- }
-